<?php 
	require_once realpath(dirname(__FILE__)) . '/../Configuration.php';

	require_once HELPER_PATH . '/DbHelper.php';
	require_once BEAN_PATH . '/Rilevazione.php';
	
	class RilevazioneDao{
		
		static private $log = null;
		
		public static function init(){
			self::$log = Logger::getLogger('RilevazioneDao');
		}
		
		public static function selectLastRilevazioni(){
			$db_helper = DbHelper::getInstance();
			
			$query = "SELECT MAX(datetime_rilev), all GROUP BY id_match";
			
			try{
				$rows = $db_helper->getDbHandle()->query($query);
			} catch(Exception $e){
				self::$log->error('ERRORE: Select last rilevazioni: '.$e->getMessage());
				foreach ($rows as $row) {
					print $row['id_match'];
				}
			}
		}
		
		public static function exist($id_match){
			$db_helper = DbHelper::getInstance();
			
			$query = "SELECT COUNT(*) FROM rilev_od WHERE id_match = " . $id_match;
			
			try{
				$rows = $db_helper->getDbHandle()->query($query);
				if ($rows->fetchColumn() > 0) {
					return true;
				} else return false;
			} catch(Exception $e){
				self::$log->error('ERRORE: Insert rilevazione: '.$e->getMessage());
			}
		}
		
		/**
		 * Se la rilevazione in parametro esiste esegue l'update altrimenti
		 * l'inserimento
		 * @param Rilevazione $rilevazione
		 */
		public static function checkForUpdate(Rilevazione $rilevazione){
			$db_helper = DbHelper::getInstance();
			
			if (self::exist($rilevazione->getId_match())){
				self::update($rilevazione);
			} else{
				self::insert($rilevazione);
			}
		}
		
		/**
		 * Aggiorna a db la rilevazione in parametro
		 * @param Rilevazione $rilevazione
		 */
		public static function update(Rilevazione $rilevazione){
			$db_helper = DbHelper::getInstance();
			
			$query = 
				"UPDATE rilev_od SET " .
				"match = '" . $rilevazione->getMatch() . "'," .
				"datetime_match = " . $rilevazione->getDatetime_match() . "," .
				"datetime_rilev = " . time() . "," .
				"n_bookmakers_1 = " . $rilevazione->getN_bookmakers_1() . "," .
				"mov_down_1 = " . $rilevazione->getMov_down_1() . "," .
				"mov_up_1 = " . $rilevazione->getMov_up_1() . "," .
				"quot_in_avg_1 = " . $rilevazione->getQuot_in_avg_1() . "," .
				"quot_ou_avg_1 = " . $rilevazione->getQuot_ou_avg_1() . "," .
				"n_bookmakers_X = " . $rilevazione->getN_bookmakers_X() . "," .
				"mov_down_X = " . $rilevazione->getMov_down_X() . "," .
				"mov_up_X = " . $rilevazione->getMov_up_X() . "," .
				"quot_in_avg_X = " . $rilevazione->getQuot_in_avg_X() . "," .
				"quot_ou_avg_X = " . $rilevazione->getQuot_ou_avg_X() . "," .
				"n_bookmakers_2 = " . $rilevazione->getN_bookmakers_2() . "," .
				"mov_down_2 = " . $rilevazione->getMov_down_2() . "," .
				"mov_up_2 = " . $rilevazione->getMov_up_2() . "," .
				"quot_in_avg_2 = " . $rilevazione->getQuot_in_avg_2() . "," .
				"quot_ou_avg_2 = " . $rilevazione->getQuot_ou_avg_2() . "," .
				"oci = " . $rilevazione->getOci() . "," .
				"volume_betfair_1 = " . $rilevazione->getVolume_betfair_1() . "," .
				"volume_betfair_X = " . $rilevazione->getVolume_betfair_X() . "," .
				"volume_betfair_2 = " . $rilevazione->getVolume_betfair_2() .
				" WHERE id_match = " . $rilevazione->getId_match();
			
			try{
				$db_helper->getDbHandle()->exec($query);
			} catch(PDOException $e){
				self::$log->error('ERRORE: Update rilevazione: '.$e->getMessage());
			}
			
			self::$log->debug('Update rilevazione: '.$query);
			
		}
		
		/**
		 * Inserisce a db la rilevazione in parametro
		 * @param Rilevazione $rilevazione
		 */
		public static function insert(Rilevazione $rilevazione){
			$db_helper = DbHelper::getInstance();
			
			$query = 
				"INSERT INTO rilev_od(id_match, match, datetime_match, datetime_rilev, n_bookmakers_1, " .
				"mov_down_1, mov_up_1, quot_in_avg_1, quot_ou_avg_1, n_bookmakers_X, mov_down_X, " .
				"mov_up_X, quot_in_avg_X, quot_ou_avg_X, n_bookmakers_2, mov_down_2, mov_up_2, " .
				"quot_in_avg_2, quot_ou_avg_2, oci, volume_betfair_1, volume_betfair_X, " .
				"volume_betfair_2) VALUES(" .
			$rilevazione->getId_match() . "," .
			"'".$rilevazione->getMatch() . "'," .
			$rilevazione->getDatetime_match() . "," .
			time() . "," .
			$rilevazione->getN_bookmakers_1() . "," .
			$rilevazione->getMov_down_1() . "," .
			$rilevazione->getMov_up_1() . "," .
			$rilevazione->getQuot_in_avg_1() . "," .
			$rilevazione->getQuot_ou_avg_1() . "," .
			$rilevazione->getN_bookmakers_X() . "," .
			$rilevazione->getMov_down_X() . "," .
			$rilevazione->getMov_up_X() . "," .
			$rilevazione->getQuot_in_avg_X() . "," .
			$rilevazione->getQuot_ou_avg_X() . "," .
			$rilevazione->getN_bookmakers_2() . "," .
			$rilevazione->getMov_down_2() . "," .
			$rilevazione->getMov_up_2() . "," .
			$rilevazione->getQuot_in_avg_2() . "," .
			$rilevazione->getQuot_ou_avg_2() . "," .
			$rilevazione->getOci() . "," .
			$rilevazione->getVolume_betfair_1() . "," .
			$rilevazione->getVolume_betfair_X() . "," .
			$rilevazione->getVolume_betfair_2() .
			")";
			
			try{
				$db_helper->getDbHandle()->exec($query);
			} catch(Exception $e){
				self::$log->error('ERRORE: Insert rilevazione: '.$e->getMessage());
			}
			
			self::$log->debug('Insert rilevazione: '.$query);
			
		}
		
	}
	RilevazioneDao::init();
